/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package seguridad;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 *
 * @author odeen
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        ApplicationContext aplicacion = new ClassPathXmlApplicationContext("seguridad.xml");
        ClaseProtegida cp = (ClaseProtegida) aplicacion.getBean("objetoProtegido");
        try {
            System.out.println("Probamos entrada anónima en métodoSeguro");
            cp.metodoSeguro();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        try {
            System.out.println("Probamos entrada anónima en métodoSeguro2");
            cp.metodoSeguroDenyAll();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        try {
            System.out.println("Probamos entrada anónima en métodoSeguro3");
            cp.metodoSeguroPermitAll();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        try {
            System.out.println("Probamos entrada anónima en métodoSeguro4");
            cp.metodoSinSeguridad();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        String claves[][] = {
            {"usuario", "clave"},
            {"victor", "victor"},
            {"becario", "claveBecario"},
            {"noexiste", "noexiste"}
        };
        for (String[] datos : claves) {
            System.out.println("Probamos metodoSeguro con usuario: " + datos[0] + " clave: " + datos[1]);
            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(datos[0], datos[1]));
//            SecurityContextHolder.getContext().setAuthentication(null);
//            System.out.println(SecurityContextHolder.getContext().getAuthentication().getPrincipal());
            try {
                cp.metodoSeguro();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        for (String[] datos : claves) {
            System.out.println("Probamos metodoSeguro2 con usuario: " + datos[0] + " clave: " + datos[1]);
            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(datos[0], datos[1]));
            try {
                cp.metodoSeguroDenyAll();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        for (String[] datos : claves) {
            System.out.println("Probamos metodoSeguro3 con usuario: " + datos[0] + " clave: " + datos[1]);
            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(datos[0], datos[1]));
            try {
                cp.metodoSeguroPermitAll();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        for (String[] datos : claves) {
            System.out.println("Probamos metodoSeguro4 con usuario: " + datos[0] + " clave: " + datos[1]);
            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(datos[0], datos[1]));
            try {
                cp.metodoSinSeguridad();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }


    }
}
